import request from '@/utils/http/uni-ajax';
import {
  checkStatus
} from '@/utils/http/checkStatus';
import {
  getApiUrl,
  getFileUrl,
  getUploadUrl
} from "@/utils/baseUrl";
import store from '@/store';
import {
  getCurrentRequestlang,
  useI18n
} from '@/locales/setupI18n';
import {
  contentTypeEnum
} from '@/enums/httpEnum';

/** 文件服务URL枚举 */
const Api = {
  /** 获取映射到静态资源的相对请求路径 */
  RequestPath: '/api/file/requestPath',
  /** 计算文件的Base64字符串 */
  CallFileBase64String: '/api/file/callFileBase64String',
  /** 缓存式文件上传 */
  Upload: '/api/file/upload',
  /** 流式文件上传 */
  UploadStream: '/api/file/uploadStream',
  /** 指定存储方式缓存式文件上传 */
  UploadByStoreMode: '/api/file/uploadByStoreMode',
  /** 指定存储方式流式文件上传 */
  UploadStreamByStoreMode: '/api/file/uploadStreamByStoreMode',
  /** 缓存式文件上传并复制一份至指定存储 */
  UploadAndCopy: '/api/file/uploadAndCopy',
  /** 流式文件上传并复制一份至指定存储 */
  UploadStreamAndCopy: '/api/file/uploadStreamAndCopy',
  /** 下载文件 */
  Download: '/api/file/download',
  /** 删除文件 */
  Delete: '/api/file/delete',
  /** 缓存式文件更新 */
  Update: '/api/file/update',
  /** 流式文件更新 */
  UpdateStream: '/api/file/updateStream',
  /** 以目标存储方式复制文件 */
  CopyToTarget: '/api/file/copyToTarget',
  /** 以目标存储方式迁移文件 */
  MoveToTarget: '/api/file/moveToTarget',
  /** 读取文件简介列表信息 */
  ReadIntro: '/api/file/readIntro',
  /** 根据上传标识获取文件简介 */
  GetIntroByUploadIdent: '/api/file/getIntroByUploadIdent',
  /** 根据上传标识删除文件 */
  DeleteByUploadIdent: '/api/file/deleteByUploadIdent',
  /** 读取文件存档信息 */
  ReadArchive: '/api/file/readArchive',
  /** 下载文件存档 */
  DownloadArchive: '/api/file/downloadArchive',
  /** 根据存档ID移除文件存档 */
  RemoveArchiveById: '/api/file/removeArchiveById',
  /** 根据简介ID移除文件存档 */
  RemoveArchiveByIntro: '/api/file/removeArchiveByIntro',
  /** 读取文件记录列表信息 */
  ReadRecord: '/api/file/readRecord',
  /** 获取LOGO */
  GetLogo: '/api/file/getLogo',
  /** 获取 LOGO Base64字符串 */
  GetLogoBase64String: '/api/file/getLogoBase64String',
  /** LOGO上传 */
  UploadLogo: '/api/file/uploadLogo',
  /** LOGO删除 */
  DeleteLogo: '/api/file/deleteLogo',
}

/**
 * 获取映射到静态资源的相对请求路径
 * @param mode 错误消息模型
 */
export function requestPath(mode = 'none') {
  return request.get({
    url: Api.RequestPath,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}

/**
 * 计算文件的Base64字符串
 * @param filePath 文件路径信息
 * @param name 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
 * @param formData HTTP 请求中其他额外的 form data
 * @param mode 错误消息模型
 */
export function callFileBase64String(filePath, name = 'file', formData = {}, mode = 'modal') {
  // console.log('callFileBase64String', {filePath, name, formData, uploadFunction: request.upload});
  return request.upload({
    url: Api.CallFileBase64String,
    filePath: filePath,
    name: name,
    formData: formData,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}

/**
 * 获取 LOGO Base64字符串
 * @returns LOGO Base64字符串
 */
export function getLogoBase64String() {
  return request.get({
    url: Api.GetLogoBase64String,
  });
}
